// 同步git仓库到数据库
const express = require("express");
const axios = require("axios");
const writeData = require("../db/module/writeData");
const readData = require("../db/module/readData");
const delData = require("../db/module/delData");
const moment = require("moment");

// Gitee 个人访问令牌
const GITEE_TOKEN = global.config.gitmanage.giteeToken;
// Gitee 用户名
const GITEE_USERNAME = global.config.gitmanage.giteeUserName;

// 封装请求函数
const git_res = async (url, method = "GET") => {

  const headers = {
    Authorization: `token ${GITEE_TOKEN}`,
  };
  return new Promise(async (resovle, reject) => {
    try {
      const response = await axios({
        method,
        url,
        headers,
        data: {},
        params: {},
      });
      resovle(response.data);
    } catch (error) {
      reject("操纵失败" + error);
    }
  });
};

// 定义一个异步函数来获取 Gitee 仓库信息
const getGiteeRepos = async () => {
  return new Promise(async (resovle, reject) => {
    try {
      // 构建请求的 URL，使用 Gitee API 获取指定用户的仓库列表
      const url = `https://gitee.com/api/v5/user/repos?page=1&per_page=100`;
      // 发送 GET 请求
      const repos = await git_res(url);

      //   查询数据库已有的仓库信息
      const db_data = await readData({ page: 1, size: 10000 }, "git_list");

      // 将查询到的 git 数据 写入数据库中
      //   通过 repos 与 db_data的比对,计算出数据库中不存在的 git 数据,然后将其删除
      if (db_data.total) {
        for (let i = 0; i < db_data.data.length; i++) {
          let db_item = db_data.data[i];
          let git_item = repos.find((v) => v.id === db_item.id);
          if (!git_item) {
            await delData({ id: db_item.id }, "git_list");
          }
        }
      }

      //   然后新增 或者 修改git数据
      for (let i = 0; i < repos.length; i++) {
        let item = repos[i];
        // 判断数据库数据是否在git服务务器中还存在,如果存在,写入或修改
        item.created_at = moment(item.created_at).format("yyyy-MM-DD HH:mm:ss");
        item.createTime = item.created_at;
        item.localRepoPaths = [];
        item.updated_at = moment(item.updated_at).format("yyyy-MM-DD HH:mm:ss");
        await writeData(item, "git_list");
      }
      resovle({
        code: 20000,
        msg: "操作成功",
        data: repos.length,
      });
    } catch (error) {
      // 处理请求过程中可能出现的错误
      reject({
        code: 50000,
        msg: error.message,
      });
    }
  });
};

module.exports = { getGiteeRepos, git_res };
